// console.log("12345");
// 给定一个整数数组 A，我们只能用以下方法修改该数组：我们选择某个索引 i 并将 A[i] 替换为 -A[i]，然后总共重复这个过程 K 次。（我们可以多次选择同一个索引 i。）以这种方式修改数组后，返回数组可能的最大和。
// int LargestSumAfterKNegations(int[] nums,int K)
// 样例 1
// Nums: [4,2,3 ]
// K: 1
// 输出：5

// 样例 2
// Nums:[3,1,0,-2]
// K: 3
// 输出：6

// 输入样例 3
// Nums:[2,-3,-1,5,-4]
// K: 2
// 输出：13

function LargestSumAfterKNegations(nums, k) {
  const handle = (nums) => {
    let min = nums[0],
      i = 0;
    for (let index = 1; index < nums.length; index++) {
      const element = nums[index];
      if (min > element) {
        min = element;
        i = index;
      }
    }
    nums[i] = -nums[i];
    const ans = nums.reduce((ret, item) => {
      return ret + item;
    }, 0);
    return ans;
  };
  let l = 0,
    ans = 0;
  while (l < k) {
    const _ans = handle(nums);
    ans = Math.max(_ans, ans);
    l++;
  }
  return ans;
}

const ans = LargestSumAfterKNegations([4, 2, 3], 1);
const ans2 = LargestSumAfterKNegations([3, 1, 0, -2], 3);
const ans3 = LargestSumAfterKNegations([2, -3, -1, 5, -4], 2);
console.log("ans: ", ans);
console.log("ans2: ", ans2);
console.log("ans3: ", ans3);
